export default class Channel {
    listeners = {}

    /**
     * 添加一个订阅者
     * @param {*} prop 属性名 
     * @param {*} func 订阅函数
     * @memberof Channel
     */
    take(prop, func) {
        if (!this.listeners[prop]) {
            this.listeners[prop] = []
        }
        this.listeners[prop].push(func)
    }

    /**
     * 触发监听函数
     * @param {*} prop 触发属性名
     * @param {*} args 监听函数参数
     * @memberof Channel
     */
    put(prop, ...args) {
        if (this.listeners[prop]) {
            // 防止在func运行的函数中有添加的监听，还没被触发就删除了
            const funcs = this.listeners[prop].map(t => t)
            delete this.listeners[prop]
            funcs.forEach(func => func(...args))
        }
    }

}